home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / doom / quake.zip / KASCAM17.ZIP / SOURCE / SOLDIER.QC < prev    next >
Text File  |  1997-02-19  |  11KB  |  285 lines

  1. /*
  2. ==============================================================================
  3.  
  4. SOLDIER / PLAYER
  5.  
  6. ==============================================================================
  7. */
  8.  
  9. $cd id1/models/soldier3
  10. $origin 0 -6 24
  11. $base base
  12. $skin skin
  13.  
  14. $frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8
  15.  
  16. $frame death1 death2 death3 death4 death5 death6 death7 death8
  17. $frame death9 death10
  18.  
  19. $frame deathc1 deathc2 deathc3 deathc4 deathc5 deathc6 deathc7 deathc8
  20. $frame deathc9 deathc10 deathc11
  21.  
  22. $frame load1 load2 load3 load4 load5 load6 load7 load8 load9 load10 load11
  23.  
  24. $frame pain1 pain2 pain3 pain4 pain5 pain6
  25.  
  26. $frame painb1 painb2 painb3 painb4 painb5 painb6 painb7 painb8 painb9 painb10
  27. $frame painb11 painb12 painb13 painb14
  28.  
  29. $frame painc1 painc2 painc3 painc4 painc5 painc6 painc7 painc8 painc9 painc10
  30. $frame painc11 painc12 painc13
  31.  
  32. $frame run1 run2 run3 run4 run5 run6 run7 run8
  33.  
  34. $frame shoot1 shoot2 shoot3 shoot4 shoot5 shoot6 shoot7 shoot8 shoot9
  35.  
  36. $frame prowl_1 prowl_2 prowl_3 prowl_4 prowl_5 prowl_6 prowl_7 prowl_8
  37. $frame prowl_9 prowl_10 prowl_11 prowl_12 prowl_13 prowl_14 prowl_15 prowl_16
  38. $frame prowl_17 prowl_18 prowl_19 prowl_20 prowl_21 prowl_22 prowl_23 prowl_24
  39.  
  40. /*
  41. ==============================================================================
  42. SOLDIER CODE
  43. ==============================================================================
  44. */
  45.  
  46. void() army_fire;
  47.  
  48. void()  army_stand1 =[  $stand1,    army_stand2 ] {ai_stand();};
  49. void()  army_stand2 =[  $stand2,    army_stand3 ] {ai_stand();};
  50. void()  army_stand3 =[  $stand3,    army_stand4 ] {ai_stand();};
  51. void()  army_stand4 =[  $stand4,    army_stand5 ] {ai_stand();};
  52. void()  army_stand5 =[  $stand5,    army_stand6 ] {ai_stand();};
  53. void()  army_stand6 =[  $stand6,    army_stand7 ] {ai_stand();};
  54. void()  army_stand7 =[  $stand7,    army_stand8 ] {ai_stand();};
  55. void()  army_stand8 =[  $stand8,    army_stand1 ] {ai_stand();};
  56.  
  57. void()  army_walk1  =[  $prowl_1,   army_walk2  ] {
  58. if (random() < 0.2)
  59.     sound (self, CHAN_VOICE, "soldier/idle.wav", 1, ATTN_IDLE);
  60. ai_walk(1);};
  61. void()  army_walk2  =[  $prowl_2,   army_walk3  ] {ai_walk(1);};
  62. void()  army_walk3  =[  $prowl_3,   army_walk4  ] {ai_walk(1);};
  63. void()  army_walk4  =[  $prowl_4,   army_walk5  ] {ai_walk(1);};
  64. void()  army_walk5  =[  $prowl_5,   army_walk6  ] {ai_walk(2);};
  65. void()  army_walk6  =[  $prowl_6,   army_walk7  ] {ai_walk(3);};
  66. void()  army_walk7  =[  $prowl_7,   army_walk8  ] {ai_walk(4);};
  67. void()  army_walk8  =[  $prowl_8,   army_walk9  ] {ai_walk(4);};
  68. void()  army_walk9  =[  $prowl_9,   army_walk10 ] {ai_walk(2);};
  69. void()  army_walk10 =[  $prowl_10,  army_walk11 ] {ai_walk(2);};
  70. void()  army_walk11 =[  $prowl_11,  army_walk12 ] {ai_walk(2);};
  71. void()  army_walk12 =[  $prowl_12,  army_walk13 ] {ai_walk(1);};
  72. void()  army_walk13 =[  $prowl_13,  army_walk14 ] {ai_walk(0);};
  73. void()  army_walk14 =[  $prowl_14,  army_walk15 ] {ai_walk(1);};
  74. void()  army_walk15 =[  $prowl_15,  army_walk16 ] {ai_walk(1);};
  75. void()  army_walk16 =[  $prowl_16,  army_walk17 ] {ai_walk(1);};
  76. void()  army_walk17 =[  $prowl_17,  army_walk18 ] {ai_walk(3);};
  77. void()  army_walk18 =[  $prowl_18,  army_walk19 ] {ai_walk(3);};
  78. void()  army_walk19 =[  $prowl_19,  army_walk20 ] {ai_walk(3);};
  79. void()  army_walk20 =[  $prowl_20,  army_walk21 ] {ai_walk(3);};
  80. void()  army_walk21 =[  $prowl_21,  army_walk22 ] {ai_walk(2);};
  81. void()  army_walk22 =[  $prowl_22,  army_walk23 ] {ai_walk(1);};
  82. void()  army_walk23 =[  $prowl_23,  army_walk24 ] {ai_walk(1);};
  83. void()  army_walk24 =[  $prowl_24,  army_walk1  ] {ai_walk(1);};
  84.  
  85. void()  army_run1   =[  $run1,      army_run2   ] {
  86. if (random() < 0.2)
  87.     sound (self, CHAN_VOICE, "soldier/idle.wav", 1, ATTN_IDLE);
  88. ai_run(11);};
  89. void()  army_run2   =[  $run2,      army_run3   ] {ai_run(15);};
  90. void()  army_run3   =[  $run3,      army_run4   ] {ai_run(10);};
  91. void()  army_run4   =[  $run4,      army_run5   ] {ai_run(10);};
  92. void()  army_run5   =[  $run5,      army_run6   ] {ai_run(8);};
  93. void()  army_run6   =[  $run6,      army_run7   ] {ai_run(15);};
  94. void()  army_run7   =[  $run7,      army_run8   ] {ai_run(10);};
  95. void()  army_run8   =[  $run8,      army_run1   ] {ai_run(8);};
  96.  
  97. void()  army_atk1   =[  $shoot1,    army_atk2   ] {ai_face();};
  98. void()  army_atk2   =[  $shoot2,    army_atk3   ] {ai_face();};
  99. void()  army_atk3   =[  $shoot3,    army_atk4   ] {ai_face();};
  100. void()  army_atk4   =[  $shoot4,    army_atk5   ] {ai_face();};
  101. void()  army_atk5   =[  $shoot5,    army_atk6   ] {ai_face();army_fire();
  102. self.effects = self.effects | EF_MUZZLEFLASH;};
  103. void()  army_atk6   =[  $shoot6,    army_atk7   ] {ai_face();};
  104. void()  army_atk7   =[  $shoot7,    army_atk8   ] {ai_face();SUB_CheckRefire (army_atk1);};
  105. void()  army_atk8   =[  $shoot8,    army_atk9   ] {ai_face();};
  106. void()  army_atk9   =[  $shoot9,    army_run1   ] {ai_face();};
  107.  
  108.  
  109. void()  army_pain1  =[  $pain1,     army_pain2  ] {};
  110. void()  army_pain2  =[  $pain2,     army_pain3  ] {};
  111. void()  army_pain3  =[  $pain3,     army_pain4  ] {};
  112. void()  army_pain4  =[  $pain4,     army_pain5  ] {};
  113. void()  army_pain5  =[  $pain5,     army_pain6  ] {};
  114. void()  army_pain6  =[  $pain6,     army_run1   ] {ai_pain(1);};
  115.  
  116. void()  army_painb1 =[  $painb1,    army_painb2 ] {};
  117. void()  army_painb2 =[  $painb2,    army_painb3 ] {ai_painforward(13);};
  118. void()  army_painb3 =[  $painb3,    army_painb4 ] {ai_painforward(9);};
  119. void()  army_painb4 =[  $painb4,    army_painb5 ] {};
  120. void()  army_painb5 =[  $painb5,    army_painb6 ] {};
  121. void()  army_painb6 =[  $painb6,    army_painb7 ] {};
  122. void()  army_painb7 =[  $painb7,    army_painb8 ] {};
  123. void()  army_painb8 =[  $painb8,    army_painb9 ] {};
  124. void()  army_painb9 =[  $painb9,    army_painb10] {};
  125. void()  army_painb10=[  $painb10,   army_painb11] {};
  126. void()  army_painb11=[  $painb11,   army_painb12] {};
  127. void()  army_painb12=[  $painb12,   army_painb13] {ai_pain(2);};
  128. void()  army_painb13=[  $painb13,   army_painb14] {};
  129. void()  army_painb14=[  $painb14,   army_run1   ] {};
  130.  
  131. void()  army_painc1 =[  $painc1,    army_painc2 ] {};
  132. void()  army_painc2 =[  $painc2,    army_painc3 ] {ai_pain(1);};
  133. void()  army_painc3 =[  $painc3,    army_painc4 ] {};
  134. void()  army_painc4 =[  $painc4,    army_painc5 ] {};
  135. void()  army_painc5 =[  $painc5,    army_painc6 ] {ai_painforward(1);};
  136. void()  army_painc6 =[  $painc6,    army_painc7 ] {ai_painforward(1);};
  137. void()  army_painc7 =[  $painc7,    army_painc8 ] {};
  138. void()  army_painc8 =[  $painc8,    army_painc9 ] {ai_pain(1);};
  139. void()  army_painc9 =[  $painc9,    army_painc10] {ai_painforward(4);};
  140. void()  army_painc10=[  $painc10,   army_painc11] {ai_painforward(3);};
  141. void()  army_painc11=[  $painc11,   army_painc12] {ai_painforward(6);};
  142. void()  army_painc12=[  $painc12,   army_painc13] {ai_painforward(8);};
  143. void()  army_painc13=[  $painc13,   army_run1] {};
  144.  
  145. void(entity attacker, float damage) army_pain =
  146. {
  147.     local float r;
  148.  
  149.     if (self.pain_finished > time)
  150.         return;
  151.  
  152.     r = random();
  153.  
  154.     if (r < 0.2)
  155.     {
  156.         self.pain_finished = time + 0.6;
  157.         army_pain1 ();
  158.         sound (self, CHAN_VOICE, "soldier/pain1.wav", 1, ATTN_NORM);
  159.     }
  160.     else if (r < 0.6)
  161.     {
  162.         self.pain_finished = time + 1.1;
  163.         army_painb1 ();
  164.         sound (self, CHAN_VOICE, "soldier/pain2.wav", 1, ATTN_NORM);
  165.     }
  166.     else
  167.     {
  168.         self.pain_finished = time + 1.1;
  169.         army_painc1 ();
  170.         sound (self, CHAN_VOICE, "soldier/pain2.wav", 1, ATTN_NORM);
  171.     }
  172. };
  173.  
  174.  
  175. void() army_fire =
  176. {
  177.     local   vector  dir;
  178.     local   entity  en;
  179.  
  180.     ai_face();
  181.  
  182.     sound (self, CHAN_WEAPON, "soldier/sattck1.wav", 1, ATTN_NORM);
  183.  
  184. // fire somewhat behind the player, so a dodging player is harder to hit
  185.     en = self.enemy;
  186.  
  187.     dir = en.origin - en.velocity*0.2;
  188.     dir = normalize (dir - self.origin);
  189.  
  190.     FireBullets (4, dir, '0.1 0.1 0');
  191. };
  192.  
  193.  
  194.  
  195. void()  army_die1   =[  $death1,    army_die2   ] {};
  196. void()  army_die2   =[  $death2,    army_die3   ] {};
  197. void()  army_die3   =[  $death3,    army_die4   ]
  198. {self.solid = SOLID_NOT;self.ammo_shells = 5;DropBackpack();};
  199. void()  army_die4   =[  $death4,    army_die5   ] {};
  200. void()  army_die5   =[  $death5,    army_die6   ] {};
  201. void()  army_die6   =[  $death6,    army_die7   ] {};
  202. void()  army_die7   =[  $death7,    army_die8   ] {};
  203. void()  army_die8   =[  $death8,    army_die9   ] {};
  204. void()  army_die9   =[  $death9,    army_die10  ] {};
  205. void()  army_die10  =[  $death10,   army_die10  ] {};
  206.  
  207. void()  army_cdie1  =[  $deathc1,   army_cdie2  ] {};
  208. void()  army_cdie2  =[  $deathc2,   army_cdie3  ] {ai_back(5);};
  209. void()  army_cdie3  =[  $deathc3,   army_cdie4  ]
  210. {self.solid = SOLID_NOT;self.ammo_shells = 5;DropBackpack();ai_back(4);};
  211. void()  army_cdie4  =[  $deathc4,   army_cdie5  ] {ai_back(13);};
  212. void()  army_cdie5  =[  $deathc5,   army_cdie6  ] {ai_back(3);};
  213. void()  army_cdie6  =[  $deathc6,   army_cdie7  ] {ai_back(4);};
  214. void()  army_cdie7  =[  $deathc7,   army_cdie8  ] {};
  215. void()  army_cdie8  =[  $deathc8,   army_cdie9  ] {};
  216. void()  army_cdie9  =[  $deathc9,   army_cdie10 ] {};
  217. void()  army_cdie10 =[  $deathc10,  army_cdie11 ] {};
  218. void()  army_cdie11 =[  $deathc11,  army_cdie11 ] {};
  219.  
  220.  
  221. void() army_die =
  222. {
  223. // check for gib
  224.     if (self.health < -35)
  225.     {
  226.         sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  227.         ThrowHead ("progs/h_guard.mdl", self.health);
  228.         ThrowGib ("progs/gib1.mdl", self.health);
  229.         ThrowGib ("progs/gib2.mdl", self.health);
  230.         ThrowGib ("progs/gib3.mdl", self.health);
  231.         return;
  232.     }
  233.  
  234. // regular death
  235.     sound (self, CHAN_VOICE, "soldier/death1.wav", 1, ATTN_NORM);
  236.     if (random() < 0.5)
  237.         army_die1 ();
  238.     else
  239.         army_cdie1 ();
  240. };
  241.  
  242.  
  243. /*QUAKED monster_army (1 0 0) (-16 -16 -24) (16 16 40) Ambush
  244. */
  245. void() monster_army =
  246. {
  247.     if (deathmatch)
  248.     {
  249.         remove(self);
  250.         return;
  251.     }
  252.     precache_model ("progs/soldier.mdl");
  253.     precache_model ("progs/h_guard.mdl");
  254.     precache_model ("progs/gib1.mdl");
  255.     precache_model ("progs/gib2.mdl");
  256.     precache_model ("progs/gib3.mdl");
  257.  
  258.     precache_sound ("soldier/death1.wav");
  259.     precache_sound ("soldier/idle.wav");
  260.     precache_sound ("soldier/pain1.wav");
  261.     precache_sound ("soldier/pain2.wav");
  262.     precache_sound ("soldier/sattck1.wav");
  263.     precache_sound ("soldier/sight1.wav");
  264.  
  265.     precache_sound ("player/udeath.wav");       // gib death
  266.  
  267.  
  268.     self.solid = SOLID_SLIDEBOX;
  269.     self.movetype = MOVETYPE_STEP;
  270.  
  271.     setmodel (self, "progs/soldier.mdl");
  272.  
  273.     setsize (self, '-16 -16 -24', '16 16 40');
  274.     self.health = 30;
  275.  
  276.     self.th_stand = army_stand1;
  277.     self.th_walk = army_walk1;
  278.     self.th_run = army_run1;
  279.     self.th_missile = army_atk1;
  280.     self.th_pain = army_pain;
  281.     self.th_die = army_die;
  282.  
  283.     walkmonster_start ();
  284. };
  285.